﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using MJM.CBD.Conn;
using MJM.SPP.EntidadesNegocio;

namespace MJM.SPP.AccesoDatos
{
    public class ControlAD
    {
        public int InsertarControl(ControlEN objControlEN)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_OPTCON_Insertar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmNombre,prmDescripcion,prmCodigo,prmIdControl,prmIdSubOpcion;
            try
            {
                prmDescripcion = cmd.CreateParameter();
                prmDescripcion.ParameterName = "@vOPTCON_chDESCON";
                prmDescripcion.SqlDbType = SqlDbType.VarChar;
                prmDescripcion.Value = objControlEN.OPTCON_chDESCON;
                cmd.Parameters.Add(prmDescripcion);               

                prmCodigo = cmd.CreateParameter();
                prmCodigo.ParameterName = "@vOPTCON_chCODCON";
                prmCodigo.SqlDbType = SqlDbType.VarChar;
                prmCodigo.Value = objControlEN.Codigo;
                cmd.Parameters.Add(prmCodigo);

                prmNombre = cmd.CreateParameter();
                prmNombre.ParameterName = "@vOPTCON_chNOMCON";
                prmNombre.SqlDbType = SqlDbType.VarChar;
                prmNombre.Value = objControlEN.OPTCON_chNOMCON;
                cmd.Parameters.Add(prmNombre);

                prmIdSubOpcion = cmd.CreateParameter();
                prmIdSubOpcion.ParameterName = "@vSUBOPT_P_inID";
                prmIdSubOpcion.SqlDbType = SqlDbType.Int;
                prmIdSubOpcion.Value = objControlEN.SUBOPT_P_inID;
                cmd.Parameters.Add(prmIdSubOpcion);

                prmIdControl = cmd.CreateParameter();
                prmIdControl.Direction = ParameterDirection.ReturnValue;
                prmIdControl.SqlDbType = SqlDbType.Int;
                cmd.Parameters.Add(prmIdControl);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = Convert.ToInt32(prmIdControl.Value);
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }

            return codigo;
        }

        public int Modificar(ControlEN objControlEN)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_OPTCON_Modificar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmNombre, prmDescripcion, prmEliminar, prmidControl,prmCodigo;
            try
            {
                prmDescripcion = cmd.CreateParameter();
                prmDescripcion.ParameterName = "@vOPTCON_chDESCON";
                prmDescripcion.SqlDbType = SqlDbType.VarChar;
                prmDescripcion.Value = objControlEN.OPTCON_chDESCON;
                cmd.Parameters.Add(prmDescripcion);

                prmNombre = cmd.CreateParameter();
                prmNombre.ParameterName = "@vOPTCON_chNOMCON";
                prmNombre.SqlDbType = SqlDbType.VarChar;
                prmNombre.Value = objControlEN.OPTCON_chNOMCON;
                cmd.Parameters.Add(prmNombre);

                prmCodigo = cmd.CreateParameter();
                prmCodigo.ParameterName = "@vOPTCON_chCODCON";
                prmCodigo.SqlDbType = SqlDbType.VarChar;
                prmCodigo.Value = objControlEN.Codigo;
                cmd.Parameters.Add(prmCodigo);

                prmEliminar = cmd.CreateParameter();
                prmEliminar.ParameterName = "@vSEGU_inFLAELI";
                prmEliminar.SqlDbType = SqlDbType.Int;
                prmEliminar.Value = objControlEN.SEGU_inFLAELI;
                cmd.Parameters.Add(prmEliminar);


                prmidControl = cmd.CreateParameter();
                prmidControl.ParameterName = "@vOPTCON_P_inID";
                prmidControl.SqlDbType = SqlDbType.Int;
                prmidControl.Value = objControlEN.OPTCON_P_inID;
                cmd.Parameters.Add(prmidControl);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = 1;
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
                codigo = 0;
            }
            return codigo;
        }

        public List<ControlEN> Listar(int idSubOpcion)
        {
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_OPTCON_ListarxSubopt", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader dr;
            SqlParameter prmIdSubopcion;
            List<ControlEN> lst = new List<ControlEN>();
            ControlEN obj;
            try
            {
                prmIdSubopcion = cmd.CreateParameter();
                prmIdSubopcion.ParameterName = "@vSUBOPT_P_inID";
                prmIdSubopcion.SqlDbType = SqlDbType.Int;
                prmIdSubopcion.Value = idSubOpcion;
                cmd.Parameters.Add(prmIdSubopcion);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    obj = new ControlEN();
                    obj.OPTCON_P_inID = dr.GetInt32(0);
                    obj.OPTCON_chNOMCON = dr.GetString(2);
                    obj.OPTCON_chDESCON = dr.GetString(3);
                    obj.SUBOPT_P_inID = dr.GetInt32(1);
                    obj.SEGU_inFLAELI = dr.GetInt32(4);
                    obj.Codigo = dr.GetString(5);
                    lst.Add(obj);
                }
                
                cmd.Connection.Close();
                conn.Dispose();
                cmd.Dispose();
            }
            catch(Exception ex)
            {
                conn.Dispose();
                cmd.Dispose();
            }
            return lst;
        }

        public ControlEN Obtener(int IdSubOpcion, int IdControl)
        {
            List<ControlEN> lst = Listar(IdSubOpcion);
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].OPTCON_P_inID == IdControl)
                    return lst[i];
            }
            return null;
        }

        public int Mover(int IdOpcion, int IdControl)
        {
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_OPTCON_CambCon", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmIdOpcion, prmIdControl;
            int result = 1;
            try
            {
                prmIdControl = cmd.CreateParameter();
                prmIdControl.ParameterName = "@vIdControl";
                prmIdControl.SqlDbType = SqlDbType.Int;
                prmIdControl.Value = IdControl;
                cmd.Parameters.Add(prmIdControl);

                prmIdOpcion = cmd.CreateParameter();
                prmIdOpcion.ParameterName = "@vIdOpcion";
                prmIdOpcion.SqlDbType = SqlDbType.Int;
                prmIdOpcion.Value = IdOpcion;
                cmd.Parameters.Add(prmIdOpcion);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                result = 0;
                cmd.Dispose();
                conn.Dispose();
            }
            return result;
        }
    }
}
